package org.esky.mongodb;

import java.net.UnknownHostException;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

@SuppressWarnings("deprecation")
public class Client {

//	private static String url = "192.168.1.4:27017";
	private static String url = "192.168.1.4:27017";
	private static Mongo mongo;

	/**
	 * 创建数据库连接
	 */
	static {
		try {
			// 连接远程
			mongo = new Mongo(url);
			// 连接本地
			// mongo = new Mongo();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (MongoException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 非关系型数据库常用方法(如：增、删、改、查...)
	 */
	/*
	 * 增
	 */
	// 查询该数据库，若不存在则创建一个
	protected static DB getDB(String dbName) {
		DB db = mongo.getDB(dbName);
		return db;
	}

	// 添加用户
	protected static void addUser(DB dbName, String username, char[] passwd) {
		dbName.addUser(username, passwd);
	}

	protected static void addUser(DB dbName, String username, char[] passwd,Boolean readOnly) {
		dbName.addUser(username, passwd, readOnly);
	}

	// 查询该数据表（集合），若不存在则创建一个
	protected static DBCollection getCollection(DB dbName, String collectionName) {
		DBCollection dbCollection = dbName.getCollection(collectionName);
		return dbCollection;
	}

	// 为表（集合）添加数据
	protected static void insert(DBCollection collectionName,DBObject... objects) {
		collectionName.insert(objects[0]);
	}

	/*
	 * 删
	 */
	// 删除数据库
	protected static void dropDatabase(String dbName) {
		mongo.dropDatabase(dbName);
	}
	
	// 删除表（集合）
	protected static void dropCollection(DBCollection collectionName){
		collectionName.drop();
	}
	
	// 删除表（集合）中的数据
	protected static void remove(DBCollection collectionName,BasicDBObject basicDBObject){
		collectionName.remove(basicDBObject);
	}
	
	/*
	 * 改
	 */
	/*
	 * 查
	 */
	// 列出所有数据库名，如果数据库里面是没有数据的话，并不会被列出来
	protected static void getDatabaseNames() {
		System.out.println("数据库列表 ：" + mongo.getDatabaseNames());
	}

	// 列出该数据库下的所有表（集合）名，如果表（集合）里面是没有数据的话，并不会被列出来
	protected static void getCollectionNames(DB db) {
		System.out.println(db.getName() + "表（集合）列表 ：" + db.getCollectionNames());
	}

	// 查询该表（集合）中的所有元素
	protected static DBCursor find(DBCollection collectionName) {
		DBCursor ite = collectionName.find();
		return ite;
	}

	// 条件查询该表（集合）中的所有元素
	protected static DBCursor find(DBCollection collectionName,BasicDBObject basicDBObject) {
		DBCursor ite = collectionName.find(basicDBObject);
		return ite;
	}

	// 查询该表（集合）中第一条数据
	protected static DBObject findOne(DBCollection collectionName) {
		DBObject object = collectionName.findOne();
		return object;
	}

	// 条件查询该表（集合）中第一条数据
	protected static DBObject findOne(DBCollection collectionName,BasicDBObject basicDBObject) {
		DBObject object = collectionName.findOne(basicDBObject);
		return object;
	}
	
	// 迭代表（集合）信息
	protected static void showData(DBCursor ite) {
		while (ite.hasNext()) {
			System.out.println(ite.next());
		}
	}

}
